# Лекция: Lombok Project в Java

Lombok - это библиотека в Java, которая автоматически генерирует шаблонный код, такой как геттеры, сеттеры, конструкторы, методы `equals`, `hashCode` и `toString`.

## Использование Lombok

Чтобы использовать Lombok, нужно добавить его в зависимости проекта и установить плагин Lombok для вашей IDE.

```xml
<dependencies>
    <dependency>
        <groupId>org.projectlombok</groupId>
        <artifactId>lombok</artifactId>
        <version>1.18.20</version>
        <scope>provided</scope>
    </dependency>
</dependencies>
```

## Аннотации Lombok

Lombok предоставляет множество аннотаций, которые автоматически генерируют код.

```java
@Getter @Setter // генерирует геттеры и сеттеры для всех полей
@ToString // генерирует метод toString
@EqualsAndHashCode // генерирует методы equals и hashCode
@NoArgsConstructor // генерирует конструктор без аргументов
@AllArgsConstructor // генерирует конструктор со всеми аргументами
public class User {
    private int id;
    private String name;
    private String email;
}
```

---

# Практические задания

1. **Создайте класс `Product` с полями `id`, `name` и `price`, используя аннотации Lombok.** (Сложность: 1/5)
```java
@Getter @Setter @ToString @EqualsAndHashCode
public class Product {
    private int id;
    private String name;
    private double price;
}
```

2. **Создайте объект `Product`, установите его поля и выведите его.** (Сложность: 1/5)
```java
Product product = new Product();
product.setId(1);
product.setName("Apple");
product.setPrice(0.99);
System.out.println(product);
```

3. **Создайте класс `Order` с полями `id`, `userId` и `products` (список `Product`), используя аннотации Lombok.** (Сложность: 2/5)
```java
@Getter @Setter @ToString @EqualsAndHashCode
public class Order {
    private int id;
    private int userId;
    private List<Product> products;
}
```

4. **Создайте объект `Order`, установите его поля и добавьте в него `Product` из предыдущего задания.** (Сложность: 2/5)
```java
Order order = new Order();
order.setId(1);
order.setUserId(1);
order.setProducts(Arrays.asList(product));
System.out.println(order);
```

5. **Создайте класс `User` с полями `id`, `name`, `email` и `orders` (список `Order`), используя аннотации Lombok. Создайте объект `User`, установите его поля и добавьте в него `Order` из предыдущего задания.** (Сложность: 3/5)
```java
@Getter @Setter @ToString @EqualsAndHashCode
public class User {
    private int id;
    private String name;
    private String email;
    private List<Order> orders;
}

User user = new User();
user.setId(1);
user.setName("John Doe");
user.setEmail("john.doe@example.com");
user.setOrders(Arrays.asList(order));
System.out.println(user);
```